<?php
$obj = new FSC;
$obj -> notfate_any_mkdir('test/1/2/3');

class FSC{

/**
* 函数名: getfilesource
* 功能: 得到指定文件的内容
* 参数: $file 目标文件
*/
function getfilesource($file){
     if($fp=fopen($file,'r')){
         $filesource=fread($fp,filesize($file));
         fclose($fp);
         return $filesource;
     }
     else
         return false;
}
/**
* 函数名: writefile
* 功能: 创建新文件，并写入内容，如果指定文件名已存在，那将直接覆盖
* 参数: $file -- 新文件名
* $source   文件内容
*/
function writefile($file,$source){
     if($fp=fopen($file,'w')){
         $filesource=fwrite($fp,$source);
         fclose($fp);
         return $filesource;
     }
     else
         return false;
}
/**
* 函数名: movefile
* 功能: 移动文件
* 参数: $file -- 待移动的文件名
* $destfile -- 目标文件名
* $overwrite 如果目标文件存在，是否覆盖.默认是覆盖.
* $bak 是否保留原文件 默认是不保留即删除原文件
*/
function movefile($file,$destfile,$overwrite=1,$bak=0){
     if(file_exists($destfile)){
         if($overwrite)
             unlink($destfile);
         else
             return false;
     }
     if($cf=copy($file,$destfile)){
         if(!$bak)
             return(unlink($file));
         }
     return($cf);
}
/**
* 函数名: movedir
* 功能: 这是下一涵数move的附助函数，功能就是移动目录
*/
function movedir($dir,$destdir,$overwrite=1,$bak=0){
      @set_time_limit(600);
     if(!file_exists($destdir))
         FSC::notfate_any_mkdir($destdir);
     if(file_exists($dir)&&(is_dir($dir)))
         {
         if(substr($dir,-1)!='/')$dir.='/';
         if(file_exists($destdir)&&(is_dir($destdir))){
         if(substr($destdir,-1)!='/')$destdir.='/';
             $h=opendir($dir);
             while($file=readdir($h)){
                 if($file=='.'||$file=='..')
                     {
                     continue;
                     $file="";
                 }
                 if(is_dir($dir.$file)){
                     if(!file_exists($destdir.$file))
                         FSC::notfate_mkdir($destdir.$file);
                     else
                         chmod($destdir.$file,0777);
                     FSC::movedir($dir.$file,$destdir.$file,$overwrite,$bak);
                     FSC::delforder($dir.$file);
                     }
                 else
                 {
                     if(file_exists($destdir.$file)){
                         if($overwrite)unlink($destdir.$file);
                         else{
                             continue;
                             $file="";
                             }
                     }
                     if(copy($dir.$file,$destdir.$file))
                         if(!$bak)
                             if(file_exists($dir.$file)&&is_file($dir.$file))
                                 @unlink($dir.$file);
                 }
             }
         }
         else
             return false;
     }
     else
         return false;
}
/**
* 函数名: move
* 功能: 移动文件或目录
* 参数: $file -- 源文件/目录
*        $path -- 目标路径
*        $overwrite -- 如是目标路径中已存在该文件时，是否覆盖移动
*                   --   默认值是1, 即覆盖
*        $bak   -- 是否保留备份(原文件/目录)
*/
function move($file,$path,$overwrite=1,$bak=0)
      {
     if(file_exists($file)){
         if(is_dir($file)){
             if(substr($file,-1)=='/')$dirname=basename(substr($file,0,strlen($file)-1));
             else $dirname=basename($file);
             if(substr($path,-1)!='/')$path.='/';
             if($file!='.'||$file!='..'||$file!='../'||$file!='./')$path.=$dirname;
             FSC::movedir($file,$path,$overwrite,$bak);
             if(!$bak)FSC::delforder($file);
             }
         else{
             if(file_exists($path)){
                 if(is_dir($path))chmod($path,0777);
                 else {
                     if($overwrite)
                         @unlink($path);
                     else 
                         return false;
                 }
             }
             else
                 FSC::notfate_any_mkdir($path);
             if(substr($path,-1)!='/')$path.='/';
             FSC::movefile($file,$path.basename($file),$overwrite,$bak);
         }
     }
     else
         return false;
}
/**
* 函数名: delforder
* 功能: 删除目录,不管该目录下是否有文件或子目录，全部删除哦，小心别删错了哦!
* 参数: $file -- 源文件/目录
*/
function delforder($file) {
      chmod($file,0777);
      if (is_dir($file)) {
           $handle = opendir($file); 
           while($filename = readdir($handle)) {
            if ($filename != "." && $filename != "..")
             {
                 FSC::delforder($file."/".$filename);
             }
           }
           closedir($handle);
           return(rmdir($file));
      } 
      else {
         unlink($file);
       }
}
/**
* 函数名: notfate_mkdir
* 功能: 创建新目录,这是来自php.net的一段代码.弥补mkdir的不足.
* 参数: $dir -- 目录名
*/
function notfate_mkdir($dir,$mode=0777){
     $u=umask(0);
     $r=mkdir($dir,$mode);
     umask($u);
     return $r;
}
/**
* 函数名: notfate_any_mkdir
* 功能: 创建新目录,与上面的notfate_mkdir有点不同，因为它多了一个any,即可以创建多级目录
*          如:notfate_any_mkdir("abc/abc/abc/abc/abc")
* 参数: $dirs -- 目录名
*/
function notfate_any_mkdir($dirs,$mode=0777)
{
   if(!strrpos($dirs,'/'))
     {
       return(FSC::notfate_mkdir($dirs,$mode));
   }else
       {
       $forder=explode('/',$dirs);
       $f='';
       for($n=0;$n<count($forder);$n++)
           {
           if($forder[$n]=='') continue;
           $f.=((($n==0)&&($forder[$n]<>''))?(''):('/')).$forder[$n];
           if(file_exists($f)){
               chmod($f,0777);
               continue;
               }
           else 
               {
               if(FSC::notfate_mkdir($f,$mode)) continue;
               else
                   return false;
           }
         }
         return true;
       }
}

}
?>